﻿using System;
using LightINI;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using static LightINI.Ini;

namespace LightINIUnitTest
{
    [TestClass]
    public class UnitTest2
    {
        [TestMethod]
        public void TestMethod001()
        {
            Assert.IsTrue(Parser.IsSectionRow("[section1]"), "这是一个配置段声明1");
            Assert.IsTrue(Parser.IsSectionRow("[section1]# 注释内容"), "这是一个配置段声明2");
            Assert.IsTrue(Parser.IsSectionRow("[secti#on1] # 注释内容"), "这是一个配置段声明3");
            Assert.IsTrue(Parser.IsSectionRow("[secti;on1] ; 注释内容"), "这是一个配置段声明4");
            Assert.IsFalse(Parser.IsSectionRow("; [secti;on1] ; 注释内容"), "这不是一个配置段声明5");
            Assert.IsFalse(Parser.IsSectionRow("#[secti;on1] ; 注释内容"), "这不是一个配置段声明6");
        }

        [TestMethod]
        public void TestMethod002()
        {
            Assert.IsTrue(Parser.IsItemRow("item=value"), "这是一个配置项声明1");
            Assert.IsTrue(Parser.IsItemRow("item=value# 注释内容"), "这是一个配置项声明2");
            Assert.IsTrue(Parser.IsItemRow("item=\"val#ue\" # 注释内容"), "这是一个配置项声明3");
            Assert.IsTrue(Parser.IsItemRow("item=\"val;ue\" ; 注释内容"), "这是一个配置项声明4");
            Assert.IsFalse(Parser.IsItemRow("; item=value ; 注释内容"), "这不是一个配置项声明5");
            Assert.IsFalse(Parser.IsItemRow("#item=value ; 注释内容"), "这不是一个配置项声明6");
        }

        [TestMethod]
        public void TestMethod003()
        {
            var section = Parser.ResolveSection("[section1]");
            Assert.AreEqual("section1", section.Name, "配置段名称为 section1: 1");

            section = Parser.ResolveSection("[section1]# 注释内容");
            Assert.AreEqual("section1", section.Name, "配置段名称为 section1: 2");
            Assert.AreEqual("# 注释内容", section.Comment, "配置段行尾注释=# 注释内容: 2");

            section = Parser.ResolveSection("[secti#on1] # 注释内容");
            Assert.AreEqual("secti#on1", section.Name, "配置段名称为 secti#on1: 3");
            Assert.AreEqual("# 注释内容", section.Comment, "配置段行尾注释=# 注释内容: 3");

            section = Parser.ResolveSection("[secti;on1] ; 注释内容");
            Assert.AreEqual("secti;on1", section.Name, "配置段名称为 secti;on1: 4");
            Assert.AreEqual("; 注释内容", section.Comment, "配置段行尾注释=; 注释内容: 4");

            section = Parser.ResolveSection("; [secti;on1] ; 注释内容");
            Assert.IsNull(section, "无法解析此配置段: 5");

            section = Parser.ResolveSection("#[secti;on1] ; 注释内容");
            Assert.IsNull(section, "无法解析此配置段: 6");
        }
    }
}
